﻿using System;
using System.IO;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Ext.Net;
using Sio.Mdm.Entities;
using Sio.Mdm.BF.Ldap;
using Sio.Mdm.Types.Database;
using Sio.Mdm.Client;
using Sio.Mdm.Types;

namespace Sio.Mdm.Web.Instalacija
{
    public partial class LdapPredlogeSeznam : Controls.Page
    {
        #region schema*
        private static string schemaPath
        {
            get
            {
                string path = ConfigurationManager.AppSettings["ldapMigrationSchemaPath"];

                if (String.IsNullOrEmpty(path) || path == "default")
                {
                    path = AppDomain.CurrentDomain.BaseDirectory.ToString();
                }
                else
                {
                    if (path.Contains(":")) return path;

                    path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, path);
                }

                return path;
            }
        }
        #endregion

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack && !X.IsAjaxRequest)
            {
                NaloziOrgarnizacije();
                NaloziSeznamGrida(e);
            }
        }

        #region Private
        private void NaloziSeznamGrida(EventArgs arg)
        {
            GridPredlogeSeznam.LoadData<LdapPredloga>(
                new Filter<LdapPredloga>().Where(r => r.LdapPredlogaID != null).OrderBy(r => r.Ime));
        }

        private void NaloziOrgarnizacije()
        {
            EntityCollection<Sio.Mdm.Types.Database.Organizacija> orgarnizacije = new EntityCollection<Sio.Mdm.Types.Database.Organizacija>(
                  new Filter<Sio.Mdm.Types.Database.Organizacija>().Where(o => o.OrganizacijaId != null).OrderBy(o => o.Naziv));
            StoreOrganizacije.DataSource = orgarnizacije;
            StoreOrganizacije.DataBind();
        }
        #endregion

        private string CheckReferences(int PredlogaID)
        {
            string references = "";
            EntityCollection<LdapPravilo> pravila = new EntityCollection<LdapPravilo>(new Filter<LdapPravilo>().Where(p => p.LdapPredlogaID == PredlogaID));

            foreach (LdapPravilo pravilo in pravila)
            {
                if (!String.IsNullOrEmpty(references)) references += ", ";
                references += String.Format("Pravilo: '{0}'", pravilo.Ime);
            }
            
            return references;
        }

        #region OdstraniZapise
        protected void OdstraniZapise(object sender, DirectEventArgs e)
        {
            List<int> selectedItems = e.GetIdList<int>("selected", "LdapPredlogaID");
            int deleted = 0;
            foreach (int predlogaId in selectedItems)
            {
                LdapPredloga predloga = EntityFactory.LoadEntity<LdapPredloga>(
                new Filter<LdapPredloga>().Where(r => r.LdapPredlogaID == predlogaId));

                string references = CheckReferences(predlogaId);
                if (!String.IsNullOrEmpty(references))
                {
                    references = String.Format("<b>Predloga '{0}', je v uporabi in je ni mogoče izbrisati!</b><br><br> Uporaba v: {1}", predloga.Ime, references);
                    ShowExtMessageBox("Opozorilo", references);
                    return;
                }

                try
                {
                    string file = Path.Combine(schemaPath, predloga.Datoteka);
                    File.Delete(file);
                }
                catch (Exception ex)
                {
                    ShowExtMessageBox("Opozorilo", String.Format("Prišlo je do napake pri brisanju datoteke/predloge: {0}, Napaka: {1}", predloga.Datoteka,ex.Message));
                    return;
                }

                predloga.Delete();
                deleted++;
            }

            if (deleted > 0)
            {
                StorePredlogeSeznam.DataBind();
                ShowExtNotification("Brisanje", String.Format("Brisanje je bilo uspešno. <br><br>Število izbrisanih zapisov: {0}.", deleted));
            }
        }
        #endregion
    }
}
